#lang scheme

(define // quotient)
(define % remainder)

(define (z1 x)
  (define (it a b)
    (if (< a 10)
        (min a b)
        (it (// a 10) (min b (% a 10)))
  ))
  (it (abs x) 9))

;--------------------------------------------

(define (z2 x)
  (define (it a b)
    (if (= a 0)
        #t
        (if (= (% a 10) b)
            (it (// a 10) b)
            #f
  )))
  (it x (% x 10)))

;---------------------

(define (fact y)
  (define (iter a b)
    (if (> b y)
        a
        (iter (* a b) (+ b 1))
  ))
  (iter 1 1))

(define (z3 x)
  (define (iter a b)
    (if (> a (fact b))
        (iter a (+ b 1))
        (= a (fact b))
  ))
  (iter x 1))
;--------------------------------

(define (z4 x)
  (define (it a b)
    (if (>= b x)
         (if ( > (abs (- x a)) (abs (- x b))) b a)
         (it b (+ b a))
  ))
  (it 0 1))
;------------------------------------

(define (z5 x)
  (define (it a b)
    (if (= x b)
        ; х - равен равен сумме делителей 
        #t
        (if (< (// x 2) a)
            #f
            (if (= (% x a) 0) ; если а делит x
                (it (+ a 1) (+ a b)) ; копим делители, b - сумма делителей, а - делитель 
                (it (+ a 1) b) ; если a - не делитель
  ))))
  (it 1 0))
